package com.nisco.dms.util.auto;

import java.util.ArrayList;
import java.util.List;

import com.nisco.dms.entity.SqlColumn;
import com.nisco.dms.entity.SqlTable;

/**
 * sql脚本自动生成
 * 
 * @author Robin. 2013-1-24
 *
 */
public class SqlAuto {
	private SqlTable sqlTable;
	private List<SqlColumn> columns;
	// private String colName;
	// private String colType;
	// private Integer colSize;
	// private String colPrikey;
	// private String colDes;
	// private Integer tabId;
	// private String memo;
	// private String colNull;
	//
	private String colPrikey = "";
	/**
	 * 构造方法
	 * 
	 * @param sqlTable
	 * @param columns
	 */
	public SqlAuto(SqlTable sqlTable, List<SqlColumn> columns) {
		this.sqlTable = sqlTable;
		this.columns = columns;
	}

	/**
	 * 自动生成实体类
	 */
	public void createSQL() {
		// 用于生成实体类属性的拼接字符创，根据相应的表名及字段名生成实体的类名，属性，set、get方法
		StringBuffer str = new StringBuffer();
		int max = columns.size();

		// 用于将拼接好的字符串传至TextFile.java来替换相应的实体模板参数。
		List<String> list = new ArrayList<String>();

		if (max > 0) {
			for (int i = 0; i < max; i++) {

				str.append("\t`" + columns.get(i).getColName().toLowerCase()
						+ "` " + columns.get(i).getColType().split(":")[0].toLowerCase()
						+ "(" + columns.get(i).getColSize() + ")");
				if (columns.get(i).getColNull().equals("N")) {
					str.append(" NOT NULL ");
				} else {
					str.append(" DEFAULT NULL ");
				}
				if (columns.get(i).getColName().equals("id")) {
					str.append(" AUTO_INCREMENT ");
				}
				str.append(",\r\n");
				if(columns.get(i).getColPrikey().equals("Y")){
					colPrikey = "PRIMARY KEY (`"+columns.get(i).getColName().toLowerCase()+"`)";
				}
			}
			str.append("\t"+colPrikey+"\r\n");
			// 获取模板
			TextFile textFile = new TextFile(
					"src/main/resources/codeTemplate/SQLTemplate.txt");
			list.add("[args]" + "<==>" + str.toString());
			list.add("[tableName]" + "<==>" + sqlTable.getTabName());

			
			textFile.write("src/main/resources/autocode/" + sqlTable.getTabName() + ".sql", list);
		}
	}
}
